﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace DBXml.Core
{
    class Search
    {

        public XElement[] Sequencial(string palavra, XElement[] items)
        {
            List<XElement> ret = new List<XElement>();
            int m = 0;
            int n = items.Length;
            while (m < n)
            {
                if (items[m].Attribute("nome").Value.Contains(palavra))
                {
                    ret.Add(items[m]);
                }
                m++;
            }
            if (ret.Count > 0)
            {
                return ret.ToArray();
            }
            return null;
        }

        public int Binaria(decimal numero, XElement[] items)
        {
            Sort<XElement> mySort = new Sort<XElement>();
            XElement[] actual = mySort.SelectionSort(items, 0, items.Length, new AlphanumComparatorFast(Constants.TipoOrdenacao.Numero).Compare);

            int meio;
            int Min = 0;
            int Max = items.Length - 1;
            do
            {
                meio = (int)(Min + Max) / 2;
                if (Convert.ToInt32(items[meio].Attribute("numero").Value) == numero)
                {
                    return Convert.ToInt32(items[meio].Attribute("id").Value) ;
                }
                else if (numero > Convert.ToInt32(items[meio].Attribute("numero").Value))
                {
                    Min = meio + 1;
                }
                else
                {
                    Max = meio - 1;
                }
            } while (Min <= Max);
            // Caso 0 retorno for -1, está este número não existe.
            return -1;
        }
    }
}
